require 'digest/sha1'

#
#= ユーザマスタモデル
#
#ログイン時の認証、パスワードの暗号化・変更を行う。
#
class MstUser < ActiveRecord::Base

  attr_accessor :password_confirmation


  #
  #=== ユーザーオブジェクトを返す
  #
  #ログインID、パスワードを元にユーザーデータを検索し
  #一致した場合(認証OK)はユーザーオブジェクトを返す。
  #
  def self.authenticate(login, pass)
    logger.info login + ':' + pass + ' > ' + sha1(pass)
    find(:first, :conditions => ["login_id = ? AND password = ?", login, sha1(pass)])
  end


  #
  #=== パスワードの変更
  #
  #パスワードを変更する。
  #
  def change_password(pass)
    update_attribute "password", self.class.sha1(pass)
  end


  #
  #=== 暗号化したパスワード文字列を返す
  #
  #暗号化方式sha1にてパスワードを暗号化する。
  #
  def self.sha1(pass)
    Digest::SHA1.hexdigest("change-me--#{pass}--")
  end


  #########################
  # protected
  #########################
  protected

  #########################
  # フィルタ定義
  #########################
  # 登録前フィルタ
  #before_create :crypt_password
  #before_update :crypt_password


  #
  #=== パスワードを保存する
  #
  #パスワードを暗号化し、属性値に保存する。
  #
  def crypt_password
    write_attribute("srcpassword", password)
    write_attribute("password", self.class.sha1(password))
  end

  #########################
  # 検証定義
  #########################
  # 文字列長検証
  validates_length_of :login_id, :minimum => 3, :too_short=>"too_short,%d"
  validates_length_of :password, :minimum => 5, :too_short=>"too_short,%d"
  validates_length_of :login_id, :maximum => 255, :too_long=>"too_long,%d"
  validates_length_of :password, :maximum => 255, :too_long=>"too_long,%d"
  validates_length_of :user_name, :maximum => 255, :too_long=>"too_long,%d"
  validates_length_of :email, :maximum => 255, :too_long=>"too_long,%d"
  validates_length_of :name, :maximum => 255, :allow_nil=>true, :too_long=>"too_long,%d"
  validates_length_of :company_name, :maximum => 60, :allow_nil=>true, :too_long=>"too_long,%d"
  validates_length_of :section_name, :maximum => 60, :allow_nil=>true, :too_long=>"too_long,%d"
  validates_length_of :zip, :maximum => 8, :allow_nil=>true, :too_long=>"too_long,%d"
  validates_length_of :prefecture, :maximum => 10, :allow_nil=>true, :too_long=>"too_long,%d"
  validates_length_of :address1, :maximum => 100, :allow_nil=>true, :too_long=>"too_long,%d"
  validates_length_of :address2, :maximum => 100, :allow_nil=>true, :too_long=>"too_long,%d"
  validates_length_of :tel, :maximum => 14, :allow_nil=>true, :too_long=>"too_long,%d"
  validates_length_of :fax, :maximum => 14, :allow_nil=>true, :too_long=>"too_long,%d"
  # 未入力検証
  validates_presence_of :login_id, :password, :password_confirmation, :email, :user_name, :message=>:cant_be_empty
  # ユニーク検証
  validates_uniqueness_of :login_id, :on => :create, :message=>:has_already_been_taken
  # マッチング検証
  validates_confirmation_of :password, :message=>:dose_not_match_password
  # 範囲内検証
  validates_inclusion_of :sex, :in=>[1,2], :allow_nil=>true, :message=>:in_not_included
  validates_inclusion_of :valid_flg, :in=>[0,1], :message=>:in_not_included
end
